/**********************************************************************
* Filename: Cidade.java
* Created: 2013/05/30
* @author Fernando Brito e Abreu
**********************************************************************/
package org.quasar.airNova.businessLayer;

import org.quasar.airNova.persistenceLayer.Database;

import java.util.Set;
import java.util.HashSet;

public class Cidade
{
	
	/***********************************************************
	* @return all instances of class Cidade
	***********************************************************/
	public static Set<Cidade> allInstances()
	{
		return Database.allInstances(Cidade.class);
	}
	
	private Pais pais;
	private String nome;
	
	/**********************************************************************
	* Default constructor
	**********************************************************************/
	public Cidade()
	{
	}
	
	/**********************************************************************
	* Parameterized constructor
	* @param pais the pais to initialize
	* @param nome the nome to initialize
	**********************************************************************/
	public Cidade(Pais pais, String nome)
	{
		this.pais = pais;
		this.nome = nome;
	}
	
	/**********************************************************************
	* ONE2MANY getter for Cidade[*] <-> Pais[1]
	* @return the pais of the cidade
	**********************************************************************/
	public Pais pais()
	{
		return pais;
	}
	
	/**********************************************************************
	* ONE2MANY setter for Cidade[*] <-> Pais[1]
	* @param pais the pais to set
	**********************************************************************/
	public void setPais(Pais pais)
	{
		this.pais = pais;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the nome of the cidade
	**********************************************************************/
	public String nome()
	{
		return nome;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param nome the nome to set
	**********************************************************************/
	public void setNome(String nome)
	{
		this.nome = nome;
	}
	
	/**********************************************************************
	* MEMBER2ASSOCIATIVE getter for Cidade[*] <-> Proximidade[*]
	* @return the proximidade of the servidas
	**********************************************************************/
	public Set<Proximidade> proximidade()
	{
		Set<Proximidade> result = new HashSet<Proximidade>();
		for (Proximidade x : Proximidade.allInstances())
			if (x.servidas()  ==  this)
				result.add(x);
		return result;
	}
	
	/**********************************************************************
	* MEMBER2ASSOCIATIVE setter for Cidade[*] <-> Proximidade[*]
	* @param proximidade the proximidade to set
	**********************************************************************/
	public void setProximidade(Set<Proximidade> proximidade)
	{
		for (Proximidade x : proximidade)
			x.setServidas(this);
	}
	
	/**********************************************************************
	* MEMBER2MEMBER getter for Cidade[*] <-> Aeroporto[*]
	* @return the servem of the servidas
	**********************************************************************/
	public Set<Aeroporto> servem()
	{
		Set<Aeroporto> result = new HashSet<Aeroporto>();
		for (Proximidade x : Proximidade.allInstances())
			if (x.servidas()  ==  this)
				result.add(x.servem());
		return result;
	}
	
	/**********************************************************************
	* MEMBER2MEMBER setter for Cidade[*] <-> Aeroporto[*]
	* @param servem the servem to set
	**********************************************************************/
	public void setServem(Set<Aeroporto> servem)
	{
		for (Aeroporto t : servem)
			for (Proximidade x : Proximidade.allInstances())
				if (x.servidas() == this)
					x.setServem(t);
	}
	
	/**********************************************************************
	* Object serializer
	**********************************************************************/
	public String toString()
	{
		return "Cidade [pais=" + pais + ", nome=" + nome + "]";
	}
	
}
